import axios from "axios";
import qs from "qs";
import { ElMessage as message } from 'element-plus';

// create an axios instance
const service = axios.create({
  baseURL: import.meta.env.VITE_VUE_BASE_URL, 
  // withCredentials: true, 
  timeout: 120000, 
  transformRequest: [
    function (data, config) {
      // 如果没有额外设置请求头的时候，直接返回一个用连接的序列话结果
      if (!config["Content-Type"]) return qs.stringify(data);
      switch (config["Content-Type"].toLowerCase()) {
        // 返回得到一个对象（可以为Json或一个数组）
        case "application/json;charset=utf-8": {
          return JSON.stringify(data);
        }
        // 如果当前发送的是formData属性的配置时，直接将当前的data返回，不做任何处理（默认当前请求头的内容为formData格式）
        case "multipart/form-data;charset=utf-8": {
          return data;
        }
        // 默认返回qs序列化后的内容，防止内容没有进行处理
        default: {
          return qs.stringify(data);
        }
      }
    },
  ],
});
// request interceptor 设置请求拦截器
service.interceptors.request.use(
  (config) => {
    return config;
  },
  (error) => {
    console.log(error); 
    return Promise.reject(error);
  }
);

// response interceptor 返回拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 判断请求接口的请求参数
    if(response.config.url.includes('/customService/question.do')){
      return res;
    }
    // 返回值code不为0错误
    if (res.code !== 0) {
      message.error(res.msg || "请求错误");
      return Promise.reject(new Error(res.msg || "请求错误"));
    } else {
      // 成功返回数据
      return res;
    }
  },
  (error) => {
    console.log("err" + error); // for debug
    message.error("服务器忙");
    return Promise.reject(error);
  }
);

export default service;
